<?php


namespace app\mini\controller\v1;

use app\common\cachemodel\MiniDateText;
use app\common\cachemodel\MiniQiandao;
use app\common\cachemodel\MiniUser;
use app\common\model\AstroChange;
use Exception;
use think\Controller;
use think\response\Json;

class Calendar extends Controller
{
    private $suitable_avoid = [
        '宜打扮自己',
        '宜胡思乱想',
        '宜赖床',
        '宜愣神',
        '宜走亲戚',
        '宜打麻将',
        '宜励志',
        '宜胡吃海塞',
        '宜奔波',
        '宜心不在焉',
        '宜抖腿',
        '宜多喝烫水',
        '宜撸猫',
        '宜换发型',
        '宜养生',
        '宜暗送秋波',
        '宜开源节流',
        '宜恋爱',
        '宜发呆',
        '宜吃火锅',
        '宜看展览',
        '宜蹦迪',
        '宜看电影',
        '宜放松',
        '宜想他/她',
        '宜跑步',
        '宜购物',
        '宜量入为出',
        '宜许愿',
        '宜剥蒜',
        '宜聚会',
        '宜喝奶茶',
        '宜出行',
        '宜千姿百态',
        '宜满面春风',
        '宜破财',
        '宜犯困',
        '宜加班',
        '宜放空自己',
        '宜约会',
        '宜学习',
        '宜大扫除',
        '宜期待',
        '宜早睡',
        '宜热情',
        '宜睡觉',
        '宜购物',
        '宜魂不守舍',
        '宜放松心情',
        '宜多喝热水',
        '宜听民谣',
        '宜看电影',
        '宜吃甜食',
        '宜越Tony老师',
        '宜锻炼',
        '宜做spa',
        '宜发呆',
        '宜精打细算',
        '宜放纵',
        '宜开黑',
        '宜邂逅',
        '宜扮演咸鱼',
        '宜和咖啡',
        '宜精神抖擞',
        '宜春光满面',
        '宜减肥',
        '宜清空购物车',
        '宜吃土',
        '宜脱发',
        '宜冲动',
        '宜养生',
        '宜喝西北风',
        '宜加班',
        '宜看电影',
        '宜下厨',
        '宜动情',
        '宜丢三落四',
        '宜探亲访友',
        '宜制定计划',
        '宜调节身心',
        '宜思考人生',
        '宜吃西餐',
        '宜整理关系',
        '宜满面春风',
        '宜表白',
        '宜找到状态',
        '宜感悟人生',
        '宜放松玩耍',
        '宜孤独',
        '宜调皮',
        '宜拖延',
        '宜宅',
        '宜念旧',
        '宜出行',
        '宜想念',
        '宜伤心',
        '宜吃烤肉',
        '宜放纵',
        '宜逛gai',
        '宜喝可乐',
        '宜换位思考',
        '宜以诚相待',
        '宜处理琐事',
        '宜吃水果',
        '宜火力全开',
        '宜穿秋裤',
        '宜赤子之心',
        '宜口是心非',
        '宜多走动',
        '宜自嗨',
        '宜冥想',
        '宜心碎',
        '宜情不自禁',
        '宜发脾气',
        '宜一见钟情',
        '宜纠缠',
        '宜规划',
        '宜加班',
        '宜长肉',
        '宜瞌睡',
        '宜不洗头',
        '宜互相伤害',
        '宜听rap',
        '宜健忘',
        '宜通宵',
        '宜想干啥就干啥',
        '宜吃冰淇淋',
        '宜发生惊喜',
        '宜整理家务',
        '宜恍然大悟',
        '宜追星',
        '宜换发型',
        '宜暧昧',
        '宜冲动',
        '宜收获',
        '宜偶遇',
        '宜犯困',
        '宜请假',
        '宜思考',
        '宜觉醒',
        '宜穷酸',
        '宜放松',
        '宜减肥',
        '宜吃瓜',
        '宜穿秋裤',
        '宜冒险',
        '宜羞涩',
        '宜吃海鲜',
        '宜放松自己',
        '宜理智',
        '宜心动',
        '宜下凡',
        '宜做梦',
        '宜人见人爱',
        '宜爱自己',
        '宜拥抱',
        '宜金榜题名',
        '宜旅游',
        '宜心动',
        '宜吃茶叶蛋',
        '宜被撩',
        '宜摔跤',
        '宜吃日料',
        '宜加班',
        '宜泡温泉',
        '宜头脑风暴',
        '宜自豪',
        '宜旅行',
        '宜晒太阳',
        '宜运动',
        '宜K歌',
        '宜忙碌',
        '宜提前规划',
        '宜追剧',
        '宜填满冰箱',
        '宜沟通',
        '宜化妆',
        '宜做喜欢的事',
        '宜相思',
        '宜SEX',
        '宜寂寞',
        '宜喝够8杯水',
        '宜相思',
        '宜炸鸡',
        '宜精力充沛',
        '宜朝三暮四',
        '宜好好学习',
        '宜拖延',
        '宜出去嗨',
        '宜创作',
        '宜发财',
        '宜牵手',
        '宜耍帅',
        '宜穿AJ',
        '宜喝茶',
        '宜发泄',
        '宜刷朋友圈',
        '宜净化',
        '宜交友',
        '宜彷徨',
        '宜学习',
        '宜吵架',
        '宜足不出户',
        '宜满足',
        '宜失恋',
        '宜喝热水',
        '宜劳累',
        '宜瑟瑟发抖',
        '宜辛苦',
        '宜瘦',
        '宜操心',
        '宜看美剧',
        '宜奔波',
        '宜发朋友圈',
        '宜当肥宅',
        '宜困惑',
        '宜逃避',
        '宜烧脑',
        '宜感叹',
        '宜发愁',
        '宜努力',
        '宜高冷',
        '宜猎奇',
        '宜树立目标',
        '宜按摩',
        '宜刷鞋',
        '宜吃西瓜',
        '宜八卦',
        '宜及时行乐',
        '宜邂逅',
        '宜吃水果',
        '宜丧',
        '宜发生误会',
        '宜分手',
        '宜换发型',
        '宜感恩',
        '宜发现新爱好',
        '宜感动',
        '宜蹦迪',
        '宜恩爱',
        '宜期待',
        '宜吹空调',
        '宜许愿',
        '宜幼稚',
        '宜散步',
        '宜调整状态',
        '宜思念',
        '宜穿黑色',
        '宜甜蜜',
        '宜人见人爱',
        '宜跑步',
        '宜吃面条',
        '宜吃辣',
        '宜吃饺子',
        '宜享受',
        '宜吃冰棍',
        '宜打游戏',
        '宜阅读',
        '宜喝酸奶',
        '宜认识新朋友',
        '宜吃醋',
        '宜买买买',
        '宜吃蛋糕',
        '宜改变',
        '宜回忆',
        '宜吃粗粮',
        '宜C位出道',
        '宜提前睡觉',
        '宜去见想见的人',
        '宜想家',
        '宜假装',
        '宜忍耐',
        '宜整理关系',
        '宜吃夜宵',
        '宜见异思迁',
        '宜祝福',
        '宜谈情说爱',
        '宜吃火锅',
        '宜接吻',
        '宜变动',
        '宜烦躁',
        '宜下凡',
        '宜承诺',
        '宜突破',
        '宜谈判',
        '宜观察',
        '宜存钱',
        '宜学一道菜',
        '宜专注',
        '宜交心',
        '宜发福',
        '宜花钱',
        '宜听故事',
        '宜三心二意',
        '宜吹彩虹屁',
        '宜看恐怖片',
        '宜失眠',
        '宜膨胀',
        '宜煲电话粥',
        '宜爆炸',
        '宜看漫画',
        '宜劳累',
        '宜解忧',
        '宜看海',
        '宜反省自己',
        '宜请客送礼',
        '宜放弃',
        '宜畅谈',
        '宜见梦中情人',
        '宜邀约',
        '宜做猫奴',
        '宜早起',
    ];

    /**
     * 日历词条接口
     * @return Json
     * @throws Exception
     */
    public function calendar()
    {
        $now_time = time();
        $week = date('w', $now_time);
        switch ($week)
        {
            case 1:
                $week_date = '星期一';
                break;
            case 2:
                $week_date = '星期二';
                break;
            case 3:
                $week_date = '星期三';
                break;
            case 4:
                $week_date = '星期四';
                break;
            case 5:
                $week_date = '星期五';
                break;
            case 6:
                $week_date = '星期六';
                break;
            default:
                $week_date = '星期日';
                break;
        }

        $texts = (new AstroChange)->getTodayAstroChange();

        $data = [
            'text' => $this->getTodayText(2),
            'month' => date('m', $now_time),
            'day' => date('d', $now_time),
            'week' => $week_date,
            'week_num' => $week,
            'astro_text' => $texts
        ];
        return show(config('code.success'), '获取成功', $data);
    }

    /**
     * 日历签到接口
     * @return Json
     * @throws Exception
     */
    public function calendar_sign(): ?Json
    {
        $third_id = input('third_id/s');
        $token = input('token/s');
        $mini_type = input('mini_type/s');
        $params = [
            'third_id' => $third_id,
            'token' => $token,
            'mini_type' => $mini_type
        ];

        $validate = validate('Calendar');
        if (!$validate->scene('calendar_sign')->check($params))
        {
            return show(config('code.denied'), (string)$validate->getError());
        }

        $MiniUser = new MiniUser();
        //验证是否注册过
        $mini_user = $MiniUser->getMiniInfo($third_id, $mini_type);
        //签到的天数1~7
        $num = -1;
//        $msg = '今日已签到！';
        if (!$mini_user && !isset($mini_user['id']))
        {
            return show(config('code.denied'), '签到失败，此用户不存在！');
        }

        //对比token是否一致，如果不一致，提示用户重新登录
        if (!isset($mini_user['access_token']) || $mini_user['access_token'] !== $token)
        {
            return show(config('code.denied'), '登录失败，请重新登录！', []);
        }

        $now_time = time();
        //检查过期时间，如果过期，提示用户重新登录
        if (!isset($mini_user['expires_in']) || $mini_user['expires_in'] < $now_time)
        {
            return show(config('code.denied'), '登录过期，请重新登录！');
        }

        //存在此用户
        $uid = $mini_user['id'];

        $QianDaoModel = new MiniQiandao();
        //获取用户最后签到时间
        $sign_in_time = [];
        $signs = $QianDaoModel->getUserQiandao($uid);
        if ($signs)
        {//用户签过到
            $signs_time = [];
            $signs_num = [];
            foreach ($signs as $k => $v)
            {
                $signs_time[] = $k;
                $signs_num[] = $v;
            }
            $today = date('Y-m-d');
            $yesterday = date('Y-m-d', strtotime('-1 day'));
            //上次签到日期
            $last_sign_date = date('Y-m-d', $signs_time[0]);

            if ($last_sign_date === $yesterday && (int)$signs_num[0] === 6)
            {
                //签到完成
                $num = 7;
//                $msg = '连续签到7天成功！';
            } elseif ((int)$signs_num[0] === 7)
            {
                //上次连续签到了7天，重新签到成功 从num=1开始
                if ($today === $last_sign_date)
                {
                    //如果今天再次打开
//                    $msg = '连续签到7天成功，今天再次打开！';
                } else
                {
                    $num = 1;
//                    $msg = '上次连续签到了7天，重新签到成功！';
                }

            } elseif ($last_sign_date !== $today)
            {
                //最新签到不是今天，那么 插入数据 num+1
                $num = (int)$signs_num[0] + 1;
//                $msg = '签到成功！';
            }
        } else
        {
            //用户没有签过到，今天签到，签到数为1
            $num = 1;
//            $msg = '首次签到成功！';
        }

        if ($num > 0)
        {
            $insertData = [
                'mini_uid' => $uid,
                'num' => $num,
                'create_time' => $now_time
            ];
            $QianDaoModel->SavaData($insertData);
        } else
            if (isset($signs_num) && count($signs_num) > 0)
            {
                $num = (int)$signs_num[0];
            }

        for ($i = 0; $i < 7; $i++)
        {
            if ($i < $num)
            {
                $is_sign = 1;
            } else
            {
                $is_sign = 0;
            }
            $sign_in_time[] = $is_sign;
        }

        $texts = $texts = (new AstroChange)->getTodayAstroChange();

        $rand_num = random_int(0, count($this->suitable_avoid) - 1);
        $data = [
            'date' => date('F', $now_time) . '.' . date('d', $now_time) . ' ' . date('l', $now_time),//2020.11.30 Tuesday
            'day' => date('d', $now_time),//签到日，例如：30
            'suitable_avoid_text' => $this->suitable_avoid[$rand_num],//宜忌
            'astro_text' => $texts,
            'text' => $this->getTodayText(1),
            'sign_in_time' => $sign_in_time,//签到时间，例如：【1,2,3】
        ];
        return show(config('code.success'), '', $data);
    }

    /**
     * 获取鸡汤词条
     * @param int $type 1=>今日鸡汤，2=》本周鸡汤
     * @return array|bool|mixed|string
     * @throws Exception
     */
    public function getTodayText($type)
    {
        $date = (int)date('Ymd');
        $word = (new MiniDateText())->getWord($date, $type);
        return $word ?? '';
    }
}
